﻿// C. Best Binary String.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1837/C

给您一个字符串 s 由字符 0、1 和/或 ? 组成。我们称之为模式。

如果你能用 0 或 1 替换每个字符 ?（每个字符的选择都是独立的），使字符串变得相等，那么我们可以说二进制字符串（每个字符都是 0 或 1 的字符串）与模式匹配。
例如，0010 与 “?01?”匹配，但 010 与 “1”、“? ”或 ???? 不匹配。

让我们把二进制字符串的代价定义为按非降序排序所需的 “反转字符串中任意连续子串 ”形式的最小操作次数。

您必须在符合给定模式的二进制字符串中找到代价最小的字符串。如果有多个答案，请打印其中任意一个。

输入
第一行包含一个整数 t（1≤t≤3⋅104）--测试用例数。

每个测试用例的第一行也是唯一一行包含字符串 s（1≤|s|≤3⋅105），由字符 0、1 和/或 ? 组成。

所有测试用例的字符串长度总和不超过 3⋅105。

输出
对于每个测试用例，打印与给定模式匹配的字符串中代价最小的二进制字符串。如果有多个答案，则打印其中任何一个。

InputCopy
4
??01?
10100
1??10?
0?1?10?10
OutputCopy
00011
10100
111101
011110010

注释
在示例的第一个测试用例中，结果字符串的成本为 0。

在第二个测试案例中，生成字符串的代价是 2：我们可以将子串从第 1 个字符反转到第 5 个字符，从而得到字符串 00101。
然后，我们将子字符串从第 3 个字符逆转到第 4 个字符，得到字符串 00011，并按非降序排序。
*/



#include <iostream>

using namespace std;

int T;

void solve() {
    string s;
    cin >> s;
	
	int cnt = 0;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '?' && i - 1 >= 0) {
			if (s[i - 1] != '?') {
				s[i] = s[i - 1]; cnt++;
			}
		}
	}

	for (int i = s.size() - 1; i >= 0; i--) {
		if (s[i] == '?'&&i+1<s.size()) {
			if (s[i + 1] != '?') {
				s[i] = s[i + 1]; cnt++;
			}
		}
	}

	if (cnt == 0) {
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == '?') {
				s[i] = '0';
			}
		}
	}

    cout << s << endl;
}

int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}
 